package net.sf.openrocket.android.motor; import java.util.List; import net.sf.openrocket.R; import net.sf.openrocket.android.db.ConversionUtils; import android.app.AlertDialog; import android.app.Dialog; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ListView; import android.widget.TextView; public class MotorDelayDialogFragment extends DialogFragment implements View.OnClickListener, TextView.OnEditorActionListener { public interface OnDelaySelectedListener { public void onDelaySelected( double delay ); } private OnDelaySelectedListener delaySelectedListener; public void setDelaySelectedListener(OnDelaySelectedListener delaySelectedListener) { this.delaySelectedListener = delaySelectedListener; } private final static String delaysArg = "delaysArg"; public static MotorDelayDialogFragment newInstance( double[] delays ) { MotorDelayDialogFragment f = new MotorDelayDialogFragment(); Bundle b = new Bundle(); b.putDoubleArray(delaysArg, delays); f.setArguments(b); return f; } @Override public void onClick(View v) { String s = ((TextView)v).getText().toString(); double value = ConversionUtils.stringToDelay(s); if ( delaySelectedListener != null ) { delaySelectedListener.onDelaySelected(value); } } @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if ( actionId == EditorInfo.IME_ACTION_DONE ) { String s = v.getText().toString(); if ( s != null ) { // note requires ems=10 long value = Long.parseLong(s); if ( delaySelectedListener != null ) { delaySelectedListener.onDelaySelected(value); } } return true; } return false; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { if (savedInstanceState == null ) { savedInstanceState = getArguments(); } double[] delays = savedInstanceState.getDoubleArray(delaysArg); List<String> delayList = ConversionUtils.delaysToStringList(delays); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle("Enter or Choose Delay"); LayoutInflater li = getActivity().getLayoutInflater(); View v = li.inflate(R.layout.motor_config_delay_dialog, null); builder.setView(v); ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,delayList) { @Override public View getView(int position, View convertView, ViewGroup parent) { if ( convertView == null ) { convertView = getActivity().getLayoutInflater().inflate( android.R.layout.simple_list_item_1, null); } TextView tv = (TextView) convertView.findViewById(android.R.id.text1); tv.setText( getItem(position) ); tv.setOnClickListener( MotorDelayDialogFragment.this ); return convertView; } }; ListView lv = (ListView) v.findViewById(R.id.motor_config_delay_diag_list); lv.setAdapter(listAdapter); EditText et = (EditText) v.findViewById(R.id.motor_config_delay_diag_edit); et.setOnEditorActionListener(MotorDelayDialogFragment.this); return builder.create(); } }